package vo

import (
	"gluenet/internal/glue-srvp/domain/po"
	"io"
)

type CreateConfigReq struct {
	Name     string      `json:"name"`
	Describe string      `json:"describe"`
	Kind     string      `json:"kind"`
	Property string      `json:"property"`
	Charts   interface{} `json:"charts"`    // 如果目标配置kind是helm charts，则该字段不为空
	KubeYaml interface{} `json:"kube_yaml"` // 如果目标配置kind是kube pod，则该段不为空

	OptionJaeger  string    `json:"option_jaeger"`  // 是否启用jaeger监控
	OptionLinkerd string    `json:"option_linkerd"` // 是否启用linkerd监控
	OptionFlame   string    `json:"option_flame"`   // 是否启用火焰图性能监控
	FileName      string    `json:"-"`
	FileReader    io.Reader `json:"-"`
	Tags          []int64   `json:"tag_ids"`
}

type CreateInstanceReq struct {
	Name     string  `json:"name"`
	Platform string  `json:"platform"`
	Cluster  string  `json:"cluster_agent_guid"`
	TagIds   []int64 `json:"tag_ids"`
	ConfigID int64   `json:"config_id"`
}

type UpdateInstanceReq struct {
	Id       int64  `json:"id"`
	Name     string `json:"name"`
	Describe string `json:"describe"`
	//Version  int64  `json:"version"`
}

type ImportInstanceReq struct {
	Platform   string                 `json:"platform"`
	Guid       string                 `json:"guid"`
	AgentGuid  string                 `json:"agent_guid"`
	Name       string                 `json:"name"`
	Describe   string                 `json:"describe"`
	Containers map[string]interface{} `json:"containers"`
}

type InstanceContinaerAgentReq struct {
	Guid      string `json:"guid"`
	Container string `json:"container"`
}

type UpdateConfigReq struct {
	Id       int64       `json:"id"`
	Name     string      `json:"name"`
	Describe string      `json:"describe"`
	Property string      `json:"property"`
	KubeYaml interface{} `json:"kube_yaml"`
}

type DeleteConfigReq struct {
	ConfigID string
}

//type AgentRegisterReq struct {
//	Platform   string         `json:"platform"`
//	HostName   string         `json:"host_name"`
//	AreaID     string         `json:"area_id"`
//	Role       string         `json:"role"`
//	DetailInfo po.AgentDetail `json:"detail_info"`
//}

type AgentRegisterReq struct {
	Platform     string             `json:"platform"`
	AreaID       string             `json:"area_id"`
	Role         string             `json:"role"`
	ClusterName  string             `json:"cluster_name"`
	ClusterNodes []po.AgentNodeInfo `json:"cluster_nodes"`
	ParentGUID   string             `json:"parent_guid"`
	Organize     string             `json:"organize"`
	Config       *po.AgentConfig    `json:"config"`
}

type AgentPutConfigReq struct {
	Guid       string         `json:"guid"`
	ConfigInfo po.AgentConfig `json:"config"`
}

type CreateAreaReq struct {
	Country  string
	Province string
	City     string
	County   string
}

type CreateUserReq struct {
	Name  string
	ToKen string
}

type InstanceReport struct {
	Guid string      `json:"guid" yaml:"guid"`
	Op   string      `json:"operate" yaml:"operate"`
	Data interface{} `json:"data" yaml:"data"`
}

type Cprofile struct {
	Guid string                          `json:"guid"`
	Pod  string                          `json:"pod"`
	Data map[string]cprofileRootFunction `json:"data"`
}

type cprofileRootFunction struct {
	CumTime       float64                   `json:"cumtime"`
	RootFunctions []cprofileRuntimeFunction `json:"root_functions"`
}

type cprofileRuntimeFunction struct {
	TotalInfo        runtimeFunctionTotal      `json:"total"`
	RunTimeInCaller  runtimeFunctionInCaller   `json:"runtime_in_caller"`
	SubFunctionCount int64                     `json:"sub_function_count"`
	SubFunctions     []cprofileRuntimeFunction `json:"sub_functions"`
}

type runtimeFunctionInCaller struct {
	CumTime float64 `json:"cumtime"`
	TotTime float64 `json:"tottime"`
	Ncalls  int64   `json:"ncalls"`
}

type runtimeFunctionTotal struct {
	File    string  `json:"file"`
	Line    int64   `json:"line"`
	Name    string  `json:"name"`
	CumTime float64 `json:"cumtime"`
	TotTime float64 `json:"tottime"`
	NCalls  int64   `json:"ncalls"`
}

type CreateTagsReq struct {
	Tags []CreateTagReq `json:"tags"`
}

type CreateTagReq struct {
	TagValue      string `json:"tag_value"`
	TagDescribe   string `json:"tag_describe"`
	GroupID       int64  `json:"tag_group_id"`
	GroupValue    string `json:"tag_group_value"`
	GroupDescribe string `json:"tag_group_describe"`
}

type DeleteTagReq struct {
	IDs []int64 `json:"ids"`
}

type UpdateTagReq struct {
	Id       int64  `json:"id"`
	Value    string `json:"value"`
	Describe string `json:"describe"`
	GroupID  int64  `json:"group_id"`
}

type CreateTagGroupReq struct {
	Value    string `json:"value"`
	Describe string `json:"describe"`
}

type UpdateTagGroupReq struct {
	GroupID       int64  `json:"group_id"`
	GroupValue    string `json:"group_value"`
	GroupDescribe string `json:"group_describe"`
}

type DeleteTagGroupReq struct {
	IDs []int64 `json:"ids"`
}

type CreateTagObjReq struct {
	Tags []TagObj `json:"tags"`
}

type TagObj struct {
	TagID   int64  `json:"tag_id"`
	ObjID   int64  `json:"obj_id"`
	ObjType string `json:"obj_type"`
}

type UntagTagObjReq struct {
	Tags []TagObj `json:"tags"`
}

type CreateTagGroupUserReq struct {
	ID      int64  `json:"id"`
	UserID  string `json:"user_id"`
	GroupID string `json:"group_id"`
}

type CreateRepoReq struct {
	Name     string `json:"name"`
	Describe string `json:"describe"`
	Kind     string `json:"kind"`
	Url      string `json:"url"`
	AuthType string `json:"auth_type"`
}

type UpdateRepoReq struct {
	Id       int64  `json:"id"`
	Name     string `json:"name"`
	Describe string `json:"describe"`
	Kind     string `json:"kind"`
	Url      string `json:"url"`
	AuthType string `json:"auth_type"`
}

type DeleteRepoReq struct {
	Ids []int64 `json:"ids"`
}

type ImportRepoChartsReq struct {
	RepoId int64               `json:"repo_id"`
	Charts map[string][]string `json:"charts"`
}
